import json
from threading import RLock
from apscheduler.schedulers.background import BackgroundScheduler
from datetime import datetime, date


class AppState:
    __slots__ = ('persons', 'lock', 'scheduler', 'initialized', 'last_choice')

    def __init__(self):
        self.persons = []  # 人员数据
        self.lock = RLock()  # 可重入锁
        self.scheduler = BackgroundScheduler(daemon=True)
        self.initialized = False  # 初始化标志
        self.last_choice = None  # 上一次选择的数据源


# 全局应用状态
app_state = AppState()

# MySQL配置
# 在离线环境下运行时，请确保通过环境变量设置正确的数据库连接参数
# MYSQL_HOST: 数据库主机地址 (默认: 106.54.18.228)
# MYSQL_USER: 数据库用户名 (默认: admin)
# MYSQL_PASSWORD: 数据库密码 (默认: your-password)
# MYSQL_DATABASE: 数据库名称 (默认: person_db)
# MYSQL_PORT: 数据库端口 (默认: 33306)
import os

MYSQL_CONFIG = {
    "host": os.environ.get('MYSQL_HOST', '106.54.18.228'),
    "user": os.environ.get('MYSQL_USER', 'admin'),
    "password": os.environ.get('MYSQL_PASSWORD', '831114399x'),
    "database": os.environ.get('MYSQL_DATABASE', 'person_db'),
    "port": int(os.environ.get('MYSQL_PORT', 33306))
}


# 自定义日期序列化器
class DateEncoder(json.JSONEncoder):
    """处理日期对象的JSON序列化问题"""

    def default(self, obj):
        if isinstance(obj, (date, datetime)):
            return obj.strftime('%Y-%m-%d')
        return super().default(obj)